package main

import (
	"go-xorm-01/utils"
	"time"
	"xorm.io/xorm/names"
)

// 名称映射 :https://xorm.io/zh/docs/chapter-02/1.mapping/
// 名称映射规则
// 跟名称相关的函数包含在 xorm.io/xorm/names 下。名称映射规则主要负责结构体名称到表名和结构体 field 到表字段的名称映射。由 names.Mapper 接口的实现者来管理，xorm 内置了三种 Mapper 实现：names.SnakeMapper ， names.SameMapper和names.GonicMapper。
//
// SnakeMapper 支持struct为驼峰式命名，表结构为下划线命名之间的转换，这个是默认的Maper；
// SameMapper 支持结构体名称和对应的表名称以及结构体field名称与对应的表字段名称相同的命名；
// GonicMapper 和SnakeMapper很类似，但是对于特定词支持更好，比如ID会翻译成id而不是i_d。
func main() {
	SnakeMapper()
}

// SnakeMapper
//
//	@Description: SnakeMapper支持struct为驼峰式命名，表结构为下划线命名之间的转换，这个是默认的Mapper
func SnakeMapper() {
	engine := utils.GenerateEngine()
	engine.SetMapper(names.SnakeMapper{}) // SnakeMapper 【默认】
	// 自动同步结构体到数据库,见sql.sql
	engine.Sync2(new(UserSnake))

}

// UserSnake
// @Description: UserSnake
type UserSnake struct {
	Id            int64 `xorm:"id"` //指定列名 ，默认id
	Username      string
	Password      string
	RegisterTime  time.Time
	LastLoginTime time.Time
}

// TableName
//
//	@Description: 指定表名：默认为:user_snake
//	@receiver u
//	@return string
func (u UserSnake) TableName() string {
	return "user_snake"
}
